/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package entidades;

import entidades.divisiones.Division;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Version;

/**
 *
 * @author Felipe
 */
@Entity
@Table (name = "USUARIOS")
@NamedQueries(
{
    @NamedQuery (name = "buscarUsuarioPorNombre", query = "select u from Usuario u where u.nombre LIKE CONCAT('%', ?1, '%')"),
    @NamedQuery (name = "buscarPorUsuario", query = "SELECT u FROM Usuario u where u.usuario = ?1"),
    @NamedQuery (name = "buscarPorUsuarioYClave", query = "SELECT u FROM Usuario u where u.usuario = ?1 and u.clave = ?2")
})
public class Usuario implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column (name = "ID_USUARIO")
    private long id;
    
    @Column (name = "NOMBRE")
    private String nombre;
    @Column (name = "APELLIDO")
    private String apellido;
    @Column (name = "USUARIO", unique = true)
    private String usuario;
    @Column (name = "CLAVE")
    private String clave;
    @Column (name = "HABILITADO")
    private boolean habilitado;
    
    @OneToMany (cascade = {CascadeType.REFRESH})
    @JoinColumn (name = "DIVISIONES")
    private List<Division> divisiones;
    
    @JoinColumn (name = "CONTACTO")
    @OneToOne (cascade = CascadeType.ALL)
    private Contacto contacto;
    
    @Version
    private Timestamp version;
    
    public Usuario ()
    {
        
    }

    public Usuario(String nombre, String apellido, String usuario, String clave, boolean habilitado, Contacto contacto, List<Division> divisiones)
    {
        this.nombre = nombre;
        this.apellido = apellido;
        this.usuario = usuario;
        this.clave = clave;
        this.habilitado = habilitado;
        this.contacto = contacto;
        this.divisiones = divisiones;
    }

    public long getId()
    {
        return id;
    }

    public void setId(long id)
    {
        this.id = id;
    }

    public String getNombre()
    {
        return nombre;
    }

    public void setNombre(String nombre)
    {
        this.nombre = nombre;
    }

    public String getApellido()
    {
        return apellido;
    }

    public void setApellido(String apellido)
    {
        this.apellido = apellido;
    }

    public String getUsuario()
    {
        return usuario;
    }

    public void setUsuario(String usuario)
    {
        this.usuario = usuario;
    }

    public String getClave()
    {
        return clave;
    }

    public void setClave(String clave)
    {
        this.clave = clave;
    }
    
    public boolean isHabilitado ()
    {
        return this.habilitado;
    }
    
    public void setHabilitado (boolean habilitado)
    {
        this.habilitado = habilitado;
    }
    
    public Contacto getContacto()
    {
        return contacto;
    }

    public void setContacto(Contacto contacto)
    {
        this.contacto = contacto;
    }

    public List<Division> getDivisiones()
    {
        return divisiones;
    }

    public void setDivisiones(List<Division> divisiones)
    {
        this.divisiones = divisiones;
    }
    
    @Override
    public String toString ()
    {
        return this.nombre + " " + this.apellido + " [" + this.usuario + "]";
    }
}
